<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: application/json");

require_once '../../../lib/php/vars.php';
require_once '../../../lib/php/dbCon.php';
require_once 'deleteFile.php';

//wurde ein item übermittelt
if (isset($_POST['data'])) {
	if ($item = json_decode(($_POST['data']), true)) {
		
		$pref = $item['prefix'];
		
		//name der tabelle
		$table = '';
		switch ($pref) {
			case 'ctg':
				$table = 'ak_categories';
				break;
			case 'prj':
				$table = 'ak_projects';
				break;
			case 'btn':
				$table = 'ak_buttons';
				break;
		}
		
		//falls das zu speichernde Item ein Positions-Attribut bsitzt
		if (isset($item[position])) {
			//neue Position
			$posNew = $item[position];
			$json = array('new position' => $posNew);
			//Name der Positions-Spalte
			$col_pos = $pref.'_position';
			//Name der id Spalte
			$col_id = $pref.'_id';
			//die gespeicherte alte Position abfragen
			$query = 'SELECT '.$col_pos.' FROM '.$db.'.'.$table
					.' WHERE '.$pref.'_id = '.$item[id];
			if($result = mysql_query($query)) {
				$row = mysql_fetch_array($result);
				$posOld = $row[0];
				$json['old position'] = $posOld;
				//die neue Position mit der gespeicherten Position vergleichen
				if($posOld != $item[position]) {
					$json['position changed'] = true;
					//neue Position ist größer als die gespeicherte
					if($posOld < $item[position]) {
						$json['position change'] = 'increase';
						//Ober- und Untergrenze der zu ändernden Positionen festlegen,
						//die von der Positionsänderung betroffen sind 
						$position_first = $posOld;
						$position_last = $posNew;
						//den query entsprechend von "type" erstellen
						switch($pref) {
							//Kategorien laden deren Position aktualisiert werden muss
							case 'ctg':
								$query = 'SELECT '.$col_id.', '.$col_pos
										.' FROM '.$db.'.'.$table.' WHERE '
										.$col_pos.' >= '.$position_first
										.' AND '.$col_pos.' <= '.$position_last;
								break;
							//Projekte laden deren Position aktualisiert werden muss
							case 'prj':
								$query = 'SELECT '.$col_id.', '.$col_pos
										.' FROM '.$db.'.'.$table.' WHERE '
										.$col_pos.' >= '.$position_first
										.' AND '.$col_pos.' <= '.$position_last
										.' AND '.$pref.'_category_id = '.$item[category_id];
								break;
						}
						//Ergebnis aufsteigend sortieren
						$query = $query.' ORDER BY '.$col_pos.' ASC';
						$json['query'] = $query;
						if($result = mysql_query($query)) {
							$i = 0;
							//alle Positionen (außer der ersten)
							//um eins nach unten verschieben
							//erste Position auf die höchstmögliche setzen,
							//wird später durch das speichern auf den neuen korrekten
							//Wert gesetzt
							while($row = mysql_fetch_assoc($result)) {
								if ($i == 0) {
									$query = 'UPDATE '.$db.'.'.$table.' SET '
											.$col_pos.' = '. 99
											.' WHERE '
											.$col_id.' = '.$row[$col_id];
								} else {
									$query = 'UPDATE '.$db.'.'.$table.' SET '
											.$col_pos.' = '.($row[$col_pos]-1)
											.' WHERE '
											.$col_id.' = '.$row[$col_id];
								}
								if ($resultUpadateQuery = mysql_query($query)) {
									$json['result'] = 1;
								} else {
									$json['result'] = 0;
									$json['error'] = 'query '.$query.' fehlgeschlagen';
								}
								$i++;
							}
						}
					//neue Position ist kleiner als die gespeicherte
					} else {
						$json['position change'] = 'decrease';
						//Ober- und Untergrenze der zu ändernden Positionen festlegen,
						//die von der Positionsänderung betroffen sind
						$position_first = $posNew;
						$position_last = $posOld;
						//den query entsprechend von "type" erstellen
						switch($pref) {
							//Kategorien laden
							case 'ctg':
								$query = 'SELECT '.$col_id.', '.$col_pos
										.' FROM '.$db.'.'.$table.' WHERE '
										.$col_pos.' >= '.$position_first
										.' AND '.$col_pos.' <= '.$position_last;
								break;
							//Projekte laden
							case 'prj':
								$query = 'SELECT '.$col_id.', '.$col_pos
										.' FROM '.$db.'.'.$table.' WHERE '
										.$col_pos.' >= '.$position_first
										.' AND '.$col_pos.' <= '.$position_last
										.' AND '.$pref.'_category_id = '.$item[category_id];
								break;
						}
						//Ergebnis absteigend sortieren
						$query = $query.' ORDER BY '.$col_pos.' DESC';
						$json['query'] = $query;
						if($result = mysql_query($query)) {
							$i = 0;
							//alle Positionen (außer der ersten)
							//um eins nach oben verschieben
							//erste Position auf die höchstmögliche setzen,
							//wird später durch das speichern auf den neuen korrekten
							//Wert gesetzt
							while($row = mysql_fetch_assoc($result)) {
								if ($i == 0) {
									$query = 'UPDATE '.$db.'.'.$table.' SET '
											.$col_pos.' = '. 99
											.' WHERE '
											.$col_id.' = '.$row[$col_id];	
								} else {
									$query = 'UPDATE '.$db.'.'.$table.' SET '
												.$col_pos.' = '.($row[$col_pos]+1)
												.' WHERE '
												.$col_id.' = '.$row[$col_id];
								}
								if ($resultUpdateQuery = mysql_query($query)) {
									$json['result'] = 1;
								} else {
									$json['result'] = 0;
									$json['error'] = 'query '.$query.' fehlgeschlagen';
								}
								$i++;
							}
						}
					}
				}
			}
		}
		
		
		//Information über die Tabellenspalten
		$query = 'SHOW COLUMNS FROM '.$table;
		if($result = mysql_query($query)) {
			//Query erstellen
			$i = 0;
			$query = 'UPDATE '.$db.'.'.$table.' SET ';
			while ($row = mysql_fetch_assoc($result)) {
				$db_key = $row['Field'];
				$pos = strpos($db_key,'_')+1;
				$item_key = substr($row['Field'], $pos);
				if($item_key == 'thumb' || $item_key == 'img') {
					// korrekten Bildpfad erstellen und ind den array einfügen
					if (!empty($item[$item_key])) {
						$root = array($documentRoot, $sitePath, $imageRoot);
						$item[$item_key] = str_replace($root, "", $item[$item_key]);
					} else {
						//wenn kein Bild vorhanden ist kann es auch nicht aktiviert sein (angezeigt werden)
						$item[$item_key.'_enable'] = false;
					}
				}
				if($item_key == 'text' || $item_key == 'link') {
					if ($item[$item_key] == '') {
						//wenn kein Text/Link vorhanden ist, kann er auch nicht aktiviert sein (angezeigt werden)
						$item[$item_key.'_enable'] = false;
					}
				}
				if($i == 0) $query = $query.''.$db_key.' = \''
									.mysql_real_escape_string($item[$item_key]).'\'';
				else $query = $query.', '.$db_key.' = \''
									.mysql_real_escape_string($item[$item_key]).'\'';
				$i++;
			}
			$query = $query.' WHERE '.$table.'.'.$pref.'_id = '.$item['id']
							.' LIMIT 1';
			
			$json['query'] = $query;
			
			//query ausführen
			if($result = mysql_query($query)) {
				$json['id'] = $item['id'];
				$json['result'] = 1;
			} else {
				$json['error'] = 'save to database failed: '.mysql_error();
				$json['result'] = 0;
			}
		} else {
			$json['result'] = 0;
			$json['error'] = 'Get Column Info failed: '.mysql_error();
		}
	} else {
		$json = array('result' => 0, 'error' => 'decode json failed');
	}
} else {
	$json = array('result' => 0, 'error' => 'parameter missing: data = "'
											.$_POST['data'].'"');
}
// Datenbankverbindung schließen
mysql_close($conn);
$encoded = json_encode($json);
echo $encoded;
unset($encoded);
?>